package com.chinhnd.booze.activity;

import com.chinhnd.booze.R;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

/**
 * Lớp này cung cấp các biến và các hàm sử dụng chung cho tất cả các Activity
 * 
 * @author Chinhnd
 * 
 */
public class BaseActivity extends Activity {
	/**
	 * Dialog progress để chờ lấy dữ liệu
	 */
	protected ProgressDialog mProgressDialog;
	/** flag để biết activity này đã destroy */
	protected boolean mIsDestroy = false;
	/** flag để biết activity này đã stop. */
	protected boolean mIsStop = false;
	/** flag để biết activity này đã pause. */
	protected boolean mIsPause = false;
	/**
	 * flag để hạn chế người dùng click nhanh nhiều lần vào 1 đối tượng
	 */
	private boolean mIsCanClick = true;
	/**
	 * Hiển thị thông báo nhanh.
	 */
	private Toast mToast;
	/**
	 * true: bắt đầu 1 activity khác(AddEditActivity, Search,...) để update dữ
	 * liệu data.
	 * 
	 * false: không update dữ liệu.
	 */
	protected boolean mIsStartedOtherActivity = false;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		System.gc();
		System.runFinalization();
	}

	@Override
	protected void onResume() {
		super.onResume();
		System.gc();
		System.runFinalization();
		mIsPause = false;
		mIsStop = false;
		mIsCanClick = true;
		mIsStartedOtherActivity = false;
	}

	@Override
	protected void onPause() {
		super.onPause();
		dismissProgress();

		System.gc();
		System.runFinalization();

		mIsPause = true;
		mIsCanClick = false;
	}

	@Override
	protected void onStop() {
		mIsStop = true;
		if (mToast != null) {
			cancelToast();
		}
		super.onStop();
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		mIsDestroy = true;
		mToast = null;
		mProgressDialog = null;

		System.gc();
		System.runFinalization();
	}

	@Override
	public void startActivity(Intent intent) {
		mIsStartedOtherActivity = true;
		super.startActivity(intent);
	}

	@Override
	public void startActivityForResult(Intent intent, int requestCode) {
		mIsStartedOtherActivity = true;
		super.startActivityForResult(intent, requestCode);
	}

	@Override
	public void onSaveInstanceState(Bundle bundle) {
		super.onSaveInstanceState(bundle);
	}

	@Override
	public void onRestoreInstanceState(Bundle bundle) {
		super.onRestoreInstanceState(bundle);
	}

	/**
	 * Hiển thị progress dialog.
	 * 
	 * @param msgResId
	 */
	public void showProgress() {
		showProgress(null);
	}

	/**
	 * mIsDestroy = true;
	 * 
	 * @param msgResId
	 * @param keyListener
	 */
	public void showProgress(DialogInterface.OnKeyListener keyListener) {

		if (mProgressDialog != null && mProgressDialog.isShowing()) {
			return;
		}
		mProgressDialog = new ProgressDialog(this);
		mProgressDialog.setIndeterminate(true);
		mProgressDialog.setMessage(getResources().getString(R.string.waitting));

		if (keyListener != null) {
			mProgressDialog.setOnKeyListener(keyListener);
		} else {
			mProgressDialog.setCancelable(false);
		}
		mProgressDialog.show();
	}

	/**
	 * cancel progress dialog.
	 */
	public void dismissProgress() {
		if (mProgressDialog != null) {
			mProgressDialog.dismiss();
			mProgressDialog = null;
		}
	}

	/**
	 * Hiển thị Toast Message và sẽ cancel khi finish activity
	 * 
	 * @param msg
	 *            message muốn hiển thị
	 */
	public final void showToastMessage(final CharSequence msg) {
		if (mToast == null) {
			mToast = Toast.makeText(getApplicationContext(), "",
					Toast.LENGTH_SHORT);
		}

		if (mToast != null) {
			// Cancel last message toast
			if (mToast.getView().isShown()) {
				mToast.cancel();
			}
			mToast.setText(msg);
			mToast.show();
		}
	}

	/**
	 * Hiển thị Toast Message và sẽ cancel khi finish activity
	 * 
	 * @param resId
	 *            id của message muốn hiển thị
	 */
	public final void showToastMessage(final int resId) {
		if (mToast == null) {
			mToast = Toast.makeText(getApplicationContext(), "",
					Toast.LENGTH_SHORT);
		}

		if (mToast != null) {
			if (!mToast.getView().isShown()) {
				mToast.cancel();
			}
			mToast.setText(getText(resId));
			mToast.show();
		}
	}

	/**
	 * Cancel toast.
	 */
	public final void cancelToast() {
		if (mToast != null && mToast.getView().isShown()) {
			mToast.cancel();
		}
	}

	/**
	 * Hiển thị Toast Message và sẽ KHÔNG cancel khi finish activity
	 * 
	 * @param msg
	 *            message muốn hiển thị
	 */
	public final void showToastMessageNotRelease(final CharSequence msg) {
		Toast toast = Toast.makeText(getApplicationContext(), "",
				Toast.LENGTH_LONG);
		if (toast != null) {
			// Cancel last message toast
			if (toast.getView().isShown()) {
				toast.cancel();
			}
			toast.setText(msg);
			toast.show();
		}
	}

	/**
	 * Hiển thị Toast Message và sẽ KHÔNG cancel khi finish activity
	 * 
	 * 
	 * @param resId
	 *            id của message muốn hiển thị
	 */
	public final void showToastMessageNotRelease(final int resId) {
		Toast toast = Toast.makeText(getApplicationContext(), "",
				Toast.LENGTH_LONG);
		if (toast != null) {
			if (!toast.getView().isShown()) {
				toast.cancel();
			}
			toast.setText(getText(resId));
			toast.show();
		}
	}

	/**
	 * Kiểm tra sự kiện click có được thực hiện hay ko
	 * 
	 * @return true: can click. false: can not click.
	 */
	public boolean isCanClick() {
		return mIsCanClick;
	}

	/**
	 * Không làm gì khi click vào nút back trên thiết bị
	 * 
	 */
	// @Override
	// public void onBackPressed() {
	// // do nothing
	// }

}
